# -*- coding:utf-8 -*-
import re
from bs4 import BeautifulSoup

'''
    2.解析网页内容
'''

'''
2.1 创建过滤电影信息的正则表达式
    re.compile() 创建一个正则表达式对象，表示字符串的规则
    
    字符串前加r，表示去掉后面字符串中反斜杠的转移机制
    字符串前加u，表示后面的字符串是以Unicode的格式进行编码，一般都是在中文字符串前面加，防止乱码
    字符串前加b，表示后面的字符串是bytes类型
'''
# 检索电影信息的正则表达式
# 电影名
findTitle=re.compile(r'<span class="title">(.*?)</span>')
# 电影详情链接
findlink=re.compile(r'<a href="(.*?)">')
# 电影封面图片
# re.S 让.能够匹配包括换行在内的所有的字符
findPic=re.compile(r'<img.*src="(.*?)"',re.S)
# 电影评分
findRating=re.compile(r'<span class="rating_num" property="v:average">(.*?)</span>')
# 评价人数
findJudge=re.compile(r'<span>(\d*)人评价</span>')
# 一句话影评
findInq=re.compile(r'<span class="inq">(.*?)</span>')
# 主创团队
findBd=re.compile(r'<p class="">(.*?)</p>',re.S)


'''
    2.2 解析网页内容
    htmllist：获取到的整个网页内容
'''

def getText(htmllist):
    # 创建一个列表，datalist，存所有的电影信息data列表
    datalist=[]
    for html in htmllist:
        # 一条一条的解析，一个网页一个网页的解析
        soup=BeautifulSoup(html,'html.parser')
        # 对每一页网页，里面所有需要的电影信息进行循环，
        # class_='item'获取所有class='item'的div标签
        for item in soup.find_all('div',class_='item'):
            # 测试，查看电影的item的全部信息
            # print(item)
            # 创建一个列表，data用来保存每一部电影中，每一条信息
            data=[]
            # 把item转换成字符串类型，然后使用正则表达式，筛选需要的数据
            item=str(item)

            # 通过re库使用正则表达式来查找指定的字符串。
            # 获取电影名 title title是一个list类型
            titles=re.findall(findTitle,item)
            # 电影名获取到的是一个列表，并且并不是每一部电影都有两个电影名(中文名/外文名)
            # 所以我们要对电影名进行判断，判断列表的长度是1还是2，如果是1，那么就要空出外文名的位置，添加一个空字符
            if len(titles)==2:
                # 中文名    获取中文名，赋值给ctitle
                ctitle=titles[0]
                # 把中文名追加到data列表中
                data.append(ctitle)
                # 外文名 获取外文名，赋值给otitle
                otitle=titles[1]
                # 把外文名追加到data列表中
                data.append(otitle)
            elif len(titles)==1:
                # 中文名    获取中文名，赋值给ctitle
                ctitle=titles[0]
                # 把中文名追加到data列表中
                data.append(ctitle)
                # 外文名追加一个空字符
                data.append('  ')

            # 获取电影详情链接 link是一个str类型  加[0]，获取列表中第一个元素，这样link就变成了字符串类型
            link=re.findall(findlink,item)[0]
            # 把电影详情链接追加到data列表中
            data.append(link)

            # 获取电影封面图片，pic是一个str类型
            pic=re.findall(findPic,item)[0]
            # 把电影封面图片链接追加到data列表中
            data.append(pic)

            # 获取电影评分
            rating=re.findall(findRating,item)[0]
            # 把电影评分追加到data列表中
            data.append(rating)

            # 获取电影评价人数
            judge=re.findall(findJudge,item)[0]
            # 把电影评价人数追加到data列表中
            data.append(judge)

            # 获取一句话影评 inq是一个list类型
            inq=re.findall(findInq,item)
            # 删掉每一条影评里面的句号
            if len(inq)!=0: # 如果一句话影评，有
                inq=inq[0].replace('。','') # 去掉句号
                data.append(inq)    # 追加到data列表
            else:   # 否则
                data.append('  ')   # 追加空字符串

            # 获取主创团队
            bd=re.findall(findBd,item)[0]
            bd=re.sub('<br(\s+)?/>(\s+)?',' ',bd)# 去掉br标签
            bd=re.sub('/',' ',bd)  # 去掉 /
            bd=bd.strip()# 去掉空格
            # 把主创团队追加到data列表
            data.append(bd)
            '''
            print('电影名：',titles)
            print('详情链接：',link)
            print('图片链接：',pic)
            print('电影评分：',rating)
            print('评价人数：',judge)
            print('一句话影评：',inq)
            print('主创团队：',bd)
            print(data)
            print('------------------')
            '''

            # 把每一页的所有电影信息，追加到datalist列表
            datalist.append(data)
    return datalist
